package com.xbk.seckill.reservation.application.command;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

/**
 * 商品预约配置
 *
 * @author xiexu
 * @date 2025/4/23 00:56
 */
@Data
public class SeckillReservationConfigCommand implements Serializable {

    private static final long serialVersionUID = 6994147588632776413L;

    /**
     * 商品id
     */
    private Long goodsId;

    /**
     * 预约人数上限
     */
    private Integer reserveMaxUserCount;

    /**
     * 预约开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date reserveStartTime;

    /**
     * 预约结束时间
     * @DateTimeFormat：用于解析非 JSON 格式的请求参数（如 URL 参数或表单参数 form-data），将字符串转换为 Date 对象
     * @JsonFormat：用于控制 JSON 数据的序列化（后端返回）和反序列化（前端传入）
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date reserveEndTime;

    public boolean isEmpty() {
        return this.goodsId == null
                || this.reserveMaxUserCount == null
                || this.reserveMaxUserCount <= 0
                || this.reserveStartTime == null
                || this.reserveEndTime == null
                || this.reserveStartTime.after(this.reserveEndTime);
    }

}
